// 6种数据类型：String, Number,Boolean, Null, Undefined

// 原始值转布尔

// 只有 6 种值可以被转换成 false，其他都会被转换成 true

// Boolean()
// Boolean(false)
// Boolean("")
// Boolean(+0)
// Boolean(-0)
// Boolean(NaN)
// Boolean(undefined)
// Boolean(null)


// 原始值转数字

// 使用Number()将类型转换成数字类型
// 如果参数无法被转换为数字，则返回 NaN

// 参数类型             结果
// Undefined            NaN
// Null                 +0
// Boolean           如果参数是 true，返回 1。参数为 false，返回 +0
// Number	           返回与之相等的值
// String	           这段比较复杂，看例子

// Number(), 会忽略前导的0，如果不是数字，返回NaN
// 忽略前导0和空格,只解析到第一个非数字字符，开头是非数字字符，返回NaN


// 原始值转字符
// 参数类型           结果  
// Undefined      "undefined"
// Null           "null"
// Boolean        如果参数是 true，返回 "true"。参数为 false，返回 "false"
// Number         又是比较复杂，可以看例子
// String         返回与之相等的值


// 原始值转对象

// 原始值到对象的转换非常简单，原始值通过调用 String()、Number() 
// 或者 Boolean() 构造函数，转换为它们各自的包装对象。

// 对象转布尔值

// 对象到布尔值的转换非常简单：所有对象(包括数组和函数)都转换为 true。
// 对于包装对象也是这样，举个例子：
// console.log(Boolean(new Boolean(false))) // true


// 对象转数字 ToNumber同一元操作符 +
// 1. 如果对象具有 valueOf 方法，且返回一个原始值，则 JavaScript 将这个原始值转换为数字并返回这个数字
// 2. 否则，如果对象具有 toString 方法，且返回一个原始值，则 JavaScript 将其转换并返回。
// 3. 否则，JavaScript 抛出一个类型错误异常。

// 对象转字符串 ToString
// 1. 如果对象具有 toString 方法，则调用这个方法。如果他返回一个原始值，JavaScript 将这个值转换为字符串，并返回这个字符串结果。
// 2. 如果对象没有 toString 方法，或者这个方法并不返回一个原始值，那么 JavaScript 会调用 valueOf 方法。如果存在这个方法，则 JavaScript 调用它。如果返回值是原始值，JavaScript 将这个值转换为字符串，并返回这个字符串的结果。
// 3. 否则，JavaScript 无法从 toString 或者 valueOf 获得一个原始值，这时它将抛出一个类型错误异常。
